草庐IT

SQL EXISTS 运算符

全部标签

c++ - 有没有办法在指向类类型的指针中不使用 * 来调用类运算符?

当我有一个指向类的指针时,是否可以在不使用*的情况下调用operator[]?classMyClass{public:voidoperator[](intn){cout 最佳答案 是的,您应该能够使用->运算符,如下所示:a->operator[](2);Demoonideone.如果您只需要消除星号,这应该可以解决问题。如果您的目标是提高可读性,这并没有太大帮助-您需要避免使用指针,或者使用常规成员函数:classMyClass{public:voidoperator[](intn){cout现在你可以写a->at(2);(Dem

c++ - 为什么这个显式转换运算符适用于 g++ 而不是 Visual Studio 2013?

以下示例包含两个模板化类来表示度数和弧度,并在它们之间转换一个显式转换运算符。它使用g++(ideonelink)编译和运行,但不使用VisualStudio2013和VisualC++CompilerNov2013CTP(CTP_Nov2013)作为平台工具集。#includestaticconstdoublePI=3.14159265358979323846;//Forwarddeclarationstemplateclassradians;templateclassdegrees;templateclassdegrees{public:degrees(constTvalue):v

c++ - 运算符 + 和 float 参数

我对模板有一个奇怪的问题,我正在尝试在两者之间进行基本添加一个模板类和“float/double/int”类型。这是非常基本的,但如果我这样做:templateclasstoto{Ta;};templatetotooperator+(totoconst&,T&){std::coutt;totod=t+2.3;}它不会编译,因为2.3被认为是double的,它与签名不匹配。我可以为我的operator+使用第二个模板参数作为templatetotooperator+(totoconst&,D&){std::cout它编译、执行正确但太危险D可以是一切。另一种方法是使用float、doub

c++ - 单元测试拷贝构造函数和赋值运算符

我正在为几个类(C++)编写单元测试,在尝试为复制构造函数和赋值运算符编写单元测试时遇到了一个问题。两者都可能出错的一个基本问题是,程序员向类添加了一个成员,然后忘记更新c'ctor和/或operator=。我当然可以按照以下方式编写单元测试:classMyClass(){public:inta,b;non_trivial_copyablenasty;MyClass&operator=(constMyClass&_r){if(this==&r)return*this;a=_r.a;b=_r.b;nasty=acquire_non_trivial_copyable();}};TEST(M

c++ - 在这种情况下我们需要禁用默认的复制构造函数和赋值运算符?

如果我们将复制构造函数和赋值运算符设为私有(private)且不提供任何实现,它们将被禁用,如下所示:classTest{private:Test(constTest&);Test&operator=(constTest&);};但在什么情况下我们需要这样做?我的意思是我们什么时候应该这样做? 最佳答案 当您希望此类的对象不可复制时。当对象不能或不应该被复制到其他对象时,可能有很多原因。几个例子是:日志文件一些突变体单例模式对象工厂一些版本的智能指针对于上述示例,编译器提供的默认复制构造函数和默认赋值运算符版本可能会导致意外结果。c

c++ - 如果模板参数确实如此,则仅重载运算符

给定一个带有单个模板参数T的模板类A,是否可以仅重载A中可用于类型T的运算符?例如:templateclassA{public:#ifhasOperator(T,+=)T&operator+=(constT&rhs){mValue+=rhs;returnmValue;}#endifprivate:TmValue;}intmain(){Aa;a+=8;//+=willforwardtothe+=fortheintstructTest{/*nooperatorsdefined*/};Ab;//+=isnotimplementedsinceTestdoesnotimplement+=}我正在

c++ - 是否可以使用三元运算符 "?"来填充 C/C++ 中的数组列表?

这可能是一个愚蠢的问题。我正在修改别人开发的代码。我需要根据逻辑变量ThreeDim详细说明一些字符数组的值。我正在尝试这样做但没有成功。intVarNumber=ThreeDim==1?3:2;constchar*VarList[]=ThreeDim==1?{"X","Y","Z"}:{"X","Y"};但是编译器给我这样的错误error:expected‘;’before‘}’tokenerror:initializerfailstodeterminesizeof‘VarList’由于下游要求,VarList需要是constchar*。它的大小应该是VarNumber。谢谢

c++ - 为什么 C++ 设计者选择不允许非成员运算符 ()()?

我只是在玩std::function和operators,使C++语句看起来像函数式语言(F#),发现operator()之间有区别和operator.我的代码:函数1(运算符重载):functionoperator>>(functionf1,functionf2){functionf3=[=](intx){returnf1(f2(x));};returnf3;}函数2(运算符重载):functionoperator>>(functionf1,functionf2){functionf3=[=](intx,inty){returnf2(f1(x,y));};returnf3;}函数3(

c++ - 如何获取在 C++ 类主体中定义为友元的重载运算符的地址

如何获取类主体中定义为友元的重载运算符的地址?我尝试了以下方法structS{friendbooloperator==(S,S){returntrue;}};intmain(){bool(*f)(S,S)=&operator==;}但是gcc报错test.cc:Infunction‘intmain()’:test.cc:6:30:error:‘operator==’notdefinedbool(*f)(S,S)=&operator==;^这可以通过在(全局)命名空间中声明运算符来修复:booloperator==(S,S);有没有办法在不重新声明运算符的情况下获取地址?

c++ - 在什么情况下 delete 运算符会抛出错误?

在我的链表实现中,删除内部类Node实例的辅助函数deleteNode(Node*)抛出运行时错误,通过“触发断点”在VS2015的本地Windows调试器中。我小心地匹配我的new和delete运算符。范围/引用是否发挥了我没有意识到的作用?即使clear()中存在逻辑错误并且deleteNode()被传递给nullptr,它也不应该抛出错误删除nullptr,然后将nullptr赋值给自己吧?该删除有什么问题?classLinkedList{public:LinkedList():head(nullptr){}~LinkedList(){clear();}voidpush_fron